class Solution {
public:
    string minWindow(string s, string t) {
        char hash1[128]={0};
        char hash2[128]={0};
        int z=0;
        for(auto e:t)
        {
            if(hash1[e]++==0)
            {
                z++;//记录t的种类
            }
        }
        int len = INT_MAX;
        int star=-1;
        for(int left=0,right=0,count=0;right<s.size();right++)
        {
            //进窗口
            hash2[s[right]]++;
            if(hash2[s[right]]==hash1[s[right]])
                count++;
            //判断
            while(count==z)
            {
                //更新结果
                if(right-left+1<len)
                {    
                    len=right-left+1;
                    star=left;
                }
                //出窗口
                char out = s[left++];
                if(hash2[out]--==hash1[out])
                {
                    count--;
                }
            }
        }
        if(star==-1) return "";
        else return s.substr(star,len);
    }
};